"""
TODO 多表关系

1、一对一：一个学生对应一个身份
         任一表添加唯一外键，指向另一表的主键，确保一一对应。（一般少见，通常可合并表）
2、一对多/多对一：一个部门很多员工，一个员工对应一个部门
               在多的一方添加外键，指向一的一方主键
               一个主表，一个从表
3、多对多：一个学生可选多个课程，一个课程可被多个学生选
         需借助第三张中间表（至少两个字段，将多对多拆成一对多；至少两个外键，分别指向原来两张表的主键）
         多个主表，一个从表（中间表）
TODO 外键约束

1、概念：foreign key，建立主表（主键所在的表，父表）与从表（外键所在的表，子表）的关联关系，约束两个表数据的一致性和完整性
2、规则：主键不能包含空值，外键可包含空值，保证指定主键的每一个外键值为非空值
        外键的列数（一列/联合）、数据类型必须与主键一致
3、作用：防止无效信息的插入
4、语法：
    create database mydb;
    use mydb;
《 一对多
 ① 创建表：
    创建主表
    create table dept(
    deptno varchar(20) primary key,  -- 部门号
    name varchar(20)  -- 部门名字
    );
    创建从表
    create table emp(
    eid varchar(20) primary key,  -- 员工编号
    ename varchar(20), -- 员工名字
    age int,  -- 员工年龄
    dept_id varchar(20), -- 员工所属部门
    constraint emp_fk foreign key(dept_id) references dept(deptno)          主表 - 右键 - 逆向表到模型 - 拖拽从表
    或：
    foreign key(dept_id) references dept(deptno)
    );
    或：
      alter table emp add constraint emp_fk foreign key(dept_id) references dept(deptno);
 ② 添加数据：
     必须先给主表添加数据，再添加从表数据
 ③ 删除数据：
     主表的数据被从表依赖，不能删除
     从表的数据可随时删除
     可以先把从表的数据删除，再删主表的数据
 ④ 删除表：
     必须先删从表，再删主表
 ⑤ 删除外键约束：
     alter table emp drop foreign key emp_fk;
《 多对多：
 ① 创建表：
    创建主表A
      create table student(
       sid int primary key auto_increment,
       name vatchar(20),
       age int,
       gender varchar(20) );
    创建主表B
      create table course(
        cid int primary key auto_increment,
        cidname varchar(20)
      );
    创建从表
    create table score(
       sid int,
       cid int,
       score double
    );
    alter table score add constraint sc_stfk foreign key(sid) references student(sid);
    alter table score add constraint sc_cofk foreign key(cid) references course(cid);
 查看：打开其中一个主表 - 右键 - 逆向表到模型 - 拖拽另一个主表 - 拖拽从表
"""